import type { InternalAxiosRequestConfig, AxiosResponse, AxiosRequestConfig, AxiosInstance, AxiosRequestHeaders, AxiosError } from 'axios'

interface RequestInterceptors<T> {
  // 请求拦截
  requestInterceptors?: (config: InternalAxiosRequestConfig) => InternalAxiosRequestConfig
  requestInterceptorsCatch?: (err: any) => any
  // 响应拦截
  responseInterceptors?: (config: T) => T
  responseInterceptorsCatch?: (err: any) => any
}

interface RequestConfig<T = AxiosResponse> extends AxiosRequestConfig {
  interceptors?: RequestInterceptors<T>
}

export { AxiosResponse, RequestInterceptors, RequestConfig, AxiosInstance, InternalAxiosRequestConfig, AxiosRequestHeaders, AxiosError }
